Insecure Bank2 취약점(9)

Insecure Bank2 취약점(9)

Description
안전하지 않은 로깅 메커니즘
category
MobileHacking
Tag
Mobile Security
Andorid
Date
Mar 1, 2024 07:33 AM

안전하지 않은 로깅 메커니즘

안전하지 않은 로깅 메커니즘이란?

로킹이란 서비스들의 실행 상태, 사용자의 행위 등을 파일 또는 출력을 통해 남기는 행동을 말한다.
로그는 대부분 서비스들의 오작동이나, 정보유출 침해 사고가 발생하였을 때 경위 파악을 위해 사용된다.
안전하지 않은 로깅 메커니즘 취약점은 민감한 데이터나 노출이 되면 안되는 정보가 로그에 남아 있을 경우 발생하는 취약점이다.
 

취약점 진단

안드로이드 로깅 시스템은 아래와 같이 이루어져 있다.
notion image
 
커널 공간에서는 main, radio, event, system이라는 네 가지 동류의 버퍼를 관리하고 있다.
앱들은 보안정책으로 인해 커널의 버퍼에 접근이 불가능하기 때문에 /dev 디렉토리에 로그들이 저장된다.
저장되는 로그들의 정보와 종류는 다음과 같다.
로그
설명
Main
메인 앱 로그로서 앱이나 플랫폼 내부에서 android.util.Log 클래스로 기록된 로그
Event
시스템에서 발생하는 이벤트 정보를 위한 로그
Radio
이동통신망과관련된 이벤트 정보
system
안드로이드 플랫폼 내부의 하위 레벨에 있는 시스템이나 디버깅을 위한 로그
 
liblog는 네이티브 라이브러리에서 디바이스 노드를 읽고 쓸 수 있도록 API를 제공하고 있다.
C로 작성된 네이티브 애플리케이션 혹은 라이브러리에서 사용된다. 애플리케이션들은 로그 시스템에 직접 접근이 불가능하여 android.util.Log, android.util.EventLog 및 android.util.Slog 클래스를 통해 사용할 수 있다.
 
안드로이드 로그에는 5개의 static 메서드가 있고, 로그의 동급을 나타내어 준다. 개발자는 상황에 맞게 설정하여 사용할 수 있다.
등급
설명
V(Verbose)
별로 중요하지 않은 정보
I(Info)
일반 정보
D(Debug)
디버그 관련 경고
W(Warning)
경고 정보 로그
E(Error)
에러 로그
F(Fatal)
중요한 정보
S(Slient)
가장 높은 우선순위로 다른 로그들은 출력되지 않음
 
adb를 통해 log를 확인 할 땐 logcat을 이용한다.
특정 등급의 로그를 조회를 할 땐 아래와 같이 조회하면 된다.
notion image
 
추가적으로 logcat은 다양한 옵션을 제공하는데 옵션은 아래와 같다.
옵션
설명
-c
모든 로그를 지운 후 종료
-d
저장된 로그를 화면에 덤프하고 종료
-f <파일이름>
로그를 지정한 파일 이름으로 저장하고, 파일 이름을 지정하지 않을 경우 표준 출력
-g
로그 버퍼의 크기를 출력하고 종료
-b <버퍼명>
Main/radio/event 버퍼 중에서 원하는 것을 선택
-r <kbytes>
지정한 용량 만큼의 로그 파일을 생성 기본 값은 16kbytes이며, -f 옵션이 필요
-s
기본 필터 조건을 silent 등급으로 지정
-v 포멧
사용자가 출력할 로그의 포맷을 지정 포멧의 종류는 brief, process, tag, thread, raw, time, threadtime, long
 
ADB에서 logcat을 통해 살펴 본 결과 InsecureBank에서 로그인과 비밀번호 변경, 계좌이체를 요청 할 시 관련 중요 데이터가 로깅되는 것을 볼 수 있다.
비밀번호 변경 시 생기는 로그
비밀번호 변경 시 생기는 로그
 

대응방안

해당 취약점은 개발 단계에서 발생하는데 DoLogin.class를 살펴보면 로그인 성공 시 아이디와 패스워드를 로깅하는 것을 볼 수 있다. 따라서 개발 당시 중요 정보는 로깅하지 않는 것이 중요하다.
notion image